package de.fhd.pms.ctrl;

import java.util.Date;

import org.apache.log4j.Logger;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;

import com.itextpdf.text.pdf.codec.Base64.OutputStream;

import de.fhd.pms.Rechnung;
import de.fhd.pms.dao.AutomobilDao;
import de.fhd.pms.dao.FahrtDao;
import de.fhd.pms.dao.StandortDao;
import de.fhd.pms.dao.TeilnehmerDao;
import de.fhd.pms.model.Teilnehmer;

/**
 * Controller von Rechnung.
 * <p>
 * Der RechnungController übernimmt die Ablaufsteuerung für das Handling von
 * Rechnungen.
 * 
 * @author Martin Schmid
 * @author Florian Schachner
 */
@Controller
public class RechnungController {

	private static Logger log = Logger.getLogger(FahrtController.class);

	private FahrtDao fahrtDao = null;
	private TeilnehmerDao teilnehmerDao = null;
	private AutomobilDao automobilDao = null;
	private StandortDao standortDao = null;

	public void setFahrtDao(FahrtDao fahrtDao) {
		this.fahrtDao = fahrtDao;
	}
	public void setTeilnehmerDao(TeilnehmerDao teilnehmerDao) {
		this.teilnehmerDao = teilnehmerDao;
	}
	public void setAutomobilDao(AutomobilDao automobilDao) {
		this.automobilDao = automobilDao;
	}
	public void setStandortDao(StandortDao standortDao) {
		this.standortDao = standortDao;
	}

	
	@RequestMapping(value = "/LoginRechnung.html", method = RequestMethod.GET)
	public ModelAndView loginRechnung() {
		log.info("RECHNUNGCONTROLLER: LoginRechnung()");
		ModelAndView mv = new ModelAndView();
		mv.addObject("title", "Fahrt abrechnen");
		mv.addObject("message",	"Um eine Fahrt abrechnen zu können müssen Sie hier das Kennwort eingeben.");
		mv.setViewName("loginRechnung");
		return mv;
	}
	
	/**
	 * FahrtAbrechnen-Methode von RechnungController.
	 * <p>
	 * Hier wird es ermöglicht, eine bestimmte getätigte Fahrt nach diversen
	 * Kriterien abzurechnen. Diese Methode reagiert auf den Befehl
	 * '/FahrtAbrechnen.html'. Abschließend wird die View mit Namen
	 * "listFahrten" aufgerufen.
	 * 
	 * @return Gibt ein Objekt vom Typ {@link ModelAndView} ("listFahrten") zurück.
	 * @author Martin Schmid
	 * @author Florian Schachner
	 */
	@RequestMapping(value = "/FahrtAbrechnen.html", method = RequestMethod.POST)
	public ModelAndView fahrtAbrechnen(String kennwort) {
		ModelAndView mv = new ModelAndView();
		
		String s1 = "test";
		String s2 = kennwort;
		
		if ((kennwort.isEmpty()==true) || (s1.equals(s2)==false)){
			mv.addObject("message", "Das eingegebene Passwort war leider nicht korrekt.");
			mv.setViewName("error");
		}else{
			mv.addObject("title", "Fahrt abrechnen");
			mv.addObject("message", "Wählen Sie eine Fahrt aus, die Sie abrechnen möchten.");
			mv.addObject("rechnung", true);
			mv.addObject("fahrten", fahrtDao.findAbgeschlosseneDTO());
			mv.setViewName("listFahrten");
		}
		
		return mv;
	}
		
	
	/**
	 * RechnungErstellen-Methode von RechnungController.
	 * <p>
	 * Hier wird es ermöglicht, auf Basis einer getätigten Fahrt, eine Rechnung
	 * zu erstellen. Diese Methode reagiert auf den Befehl
	 * '/RechnungErstellen.html'. Abschließend wird die View mit Namen
	 * "displayRechnung" aufgerufen.
	 * 
	 * @param id - Integer
	 * @return Gibt ein Objekt vom Typ {@link ModelAndView} ("displayRechnung")
	 *         zurück.
	 * @author Martin Schmid
	 * @author Florian Schachner
	 */
	@RequestMapping(value = "/RechnungErstellen.html", method = RequestMethod.GET)
	public ModelAndView rechnungErstellen(@RequestParam(required = true) Integer id) {
		log.info("RECHNUNGCONTROLLER: RechnungErstellen()");
		log.info("Fahrtnummer: " + id);
		ModelAndView mv = new ModelAndView();
		mv.addObject("title", "Rechnung wurde erstellt");
		mv.addObject("message",	"Die von Ihnen ausgewählte Rechnung für die Fahrt " + id + " wurde erstellt.");
		mv.addObject("rechnung", fahrtDao.createRechnung(fahrtDao.findById(id)));
		fahrtDao.closeFahrt(id);

		mv.setViewName("displayRechnung");
		return mv;
	}
}
